from typing import Tuple, List


def parsedoc(doc: str, doctype='reST') -> Tuple[str, List[Tuple[str, str]], str, str]:
    """
    解析文档字符串。文档字符串的结构如同这个注释。先是对该函数的描述，再是对参数的描述，然后是返回值的描述，最后给出可选的例子。注意，如果有例子，
    要与:return之间有一个空行。
    :param doc: 要处理的文档。
    :param doctype: 注释的格式。当前支持'reST'。
    :return: 元组，分别是函数描述、参数描述列表、返回值描述和例子展示。

    '''python
    import inspect
    parsedoc(inspect.getdoc(parsedoc))
    '''
    """
    assert doctype == 'reST', "仅支持'reST'格式的注释。"
    description = ""
    params = list()
    returndoc = ""
    examples = ""

    meet_return = False
    before_param = True

    lines = doc.split("\n")
    for line in lines:
        if len(line) >= 6 and line[:7] == ':param ':
            params.append(list(line[7:].split(':')))
            params[-1] = [params[-1][0], ":".join(params[-1][1:])]
            before_param = False
        elif len(line) >= 8 and line[:8] == ':return:':
            returndoc = line[8:]
            meet_return = True
        else:
            if before_param:
                description += line + '\n'
            elif not before_param and not meet_return:
                params[-1][1] += '\n' + line
            elif meet_return:
                examples += line + '\n'
            else:
                raise Exception("错误的状态。")

    params = [tuple(i) for i in params]
    description = description[:-1]
    return description, params, returndoc, examples
